﻿#include "volumetool.h"
#include "ui_volumetool.h"

#include <QGraphicsDropShadowEffect>
#include <QVBoxLayout>
#include <QPainter>
#include <QEvent>


VolumeTool::VolumeTool(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::VolumeTool)
    , isMuted(false)
    , volumeRatio(20)
{
    ui->setupUi(this);

    // 控制窗口的 基本类型 和 行为特性
    // // 将该窗口设置为 弹出式窗口
    // this->setWindowFlag(Qt::Popup);
    // //设置该volumeTool界面为无边框
    // this->setWindowFlag(Qt::FramelessWindowHint);
    // // //设置取消阴影效果
    // this->setWindowFlag(Qt::NoDropShadowWindowHint);
    this->setWindowFlags(Qt::Popup | Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint);

    //设置窗口背景透明
    this->setAttribute(Qt::WA_TranslucentBackground);//第二个参数默认true;

     //给窗口设置阴影效果
     QGraphicsDropShadowEffect *shadowEffect = new QGraphicsDropShadowEffect(this);
     shadowEffect->setColor(QColor("#646464"));
     shadowEffect->setBlurRadius(10);// 不支持,报错
     shadowEffect->setOffset(0, 0);
     this->setGraphicsEffect(shadowEffect);


    // 设置音量按钮的图标
    ui->silenceBtn->setIcon(QIcon(":/images/volumn.png"));

    //设置默认的音量20%
    ui->volumeRatio->setText("20%");

    //设置out_line的高度尺寸
    QRect rect = ui->outSlider->geometry();
    //QRect(38,25 4x180)  180 * 20% = 36
    ui->outSlider->setGeometry(rect.x(), rect.y() + 180 - 36, rect.width(), 36);

    //移动按钮的位置
    ui->sliderBtn->move(ui->sliderBtn->x(), ui->outSlider->y() - ui->sliderBtn->height() / 2);

    // 点击是否静音
    connect(ui->silenceBtn, &QPushButton::clicked, this, &VolumeTool::onSilenceBtnClicked);

    // 安装事件过滤器
    ui->volumeBox->installEventFilter(this);
}

VolumeTool::~VolumeTool()
{
    delete ui;
}

void VolumeTool::onSilenceBtnClicked()
{
    isMuted = !isMuted;
    if(isMuted)
    {
        // true, 静音
        ui->silenceBtn->setIcon(QIcon(":/images/silent.png"));
    }
    else
    {
        ui->silenceBtn->setIcon(QIcon(":/images/volumn.png"));
    }

    // 通知QQMusic 静音操作
    emit setSilence(isMuted);
}

// 过滤volumeBox上的事件
bool VolumeTool::eventFilter(QObject *object, QEvent *event)
{
    if(ui->volumeBox == object)
    {
        if(event->type() == QEvent::MouseButtonPress)
        {
            // 鼠标按压
            calcVolume();
        }
        else if(event->type() == QEvent::MouseButtonRelease)
        {
            // 鼠标释放
            emit setMusicVolume(volumeRatio);
        }
        else if(event->type() == QEvent::MouseMove)
        {
            // 鼠标移动
            calcVolume();
            emit setMusicVolume(volumeRatio);
        }

        return true;
    }

    return QObject::eventFilter(object, event);
}

void VolumeTool::paintEvent(QPaintEvent *event)
{
    (void)event;
    // 1. 创建绘图对象 参数:QPaintDevice *device, 要在哪里绘画
    QPainter painter(this);

    // 2. 设置抗锯齿
    painter.setRenderHint(QPainter::Antialiasing, true);//第二参数默认是true

    // 3. 设置画笔
    // 没有画笔时：画出来的图形就没有边框和轮廓线
    painter.setPen(Qt::NoPen);

    // 4. 设置画刷颜色
    // painter.setBrush(QBrush(QColor(Qt::white)));
    painter.setBrush(Qt::white);

    // 5.创建一个三角形
    QPolygon polygon_3;
    QPoint a(10 + 20, 300 + 5);
    QPoint b(10 + 80 - 20, 300 + 5);
    QPoint c(10 + 20 + 20, 300 + 20 + 5);
    polygon_3.append(a);
    polygon_3.append(b);
    polygon_3.append(c);

    // 6.绘制一个三角形
    painter.drawPolygon(polygon_3);
}

void VolumeTool::calcVolume()
{
    // 获取鼠标点击时y坐标的大小
    int height = ui->volumeBox->mapFromGlobal(QCursor().pos()).y();
    // 验证高度的合法性
    height = height > 205 ? 205 : height;
    height = height < 25 ? 25 : height;
    // 更新outline位置
    ui->outSlider->setGeometry(ui->outSlider->x(), height, ui->outSlider->width(), 205 - height);
    // 更新sliderBtn位置
    // 这里注意pushButton的中心点,所以减去 height/2
    ui->sliderBtn->move(ui->sliderBtn->x(), height - ui->sliderBtn->height() / 2);
    // 计算音量的大小
    volumeRatio = (int)((ui->outSlider->height() / (float)180) * 100);
    // 更新Label显示的百分比
    ui->volumeRatio->setText(QString::number(volumeRatio)+"%");
}



